const bcrypt = require('bcrypt');
const User = require('../models/User.js');

const jwt = require('jsonwebtoken');
const { JWT_SECRET } = require('../config'); // 假设已配置JWT密钥

exports.register = async (req, res) => {
  try {
    const { email, password, role, ...otherData } = req.body;
    
    // 验证数据
    if (!email || !password || !role) {
      return res.status(400).json({ message: '所有字段都是必填的' });
    }
    
    // 检查用户是否已存在
    const existingUser = await User.findOne({ where: { email } });
    if (existingUser) {
      return res.status(400).json({ message: '该邮箱已被注册' });
    }
    
    // 加密密码
    const salt = await bcrypt.genSalt(10);
    const hashedPassword = await bcrypt.hash(password, salt);
    
    // 创建用户
    const user = await User.create({
      email,
      password: hashedPassword,
      role,
      ...otherData
    });
    
    res.status(201).json({ message: '注册成功', user: { id: user.id, email: user.email, role: user.role } });
  } catch (error) {
    console.error('注册错误:', error);
    res.status(500).json({ message: '注册失败', error: error.message });
  }
};

// 登录方法
exports.login = async (req, res) => {
  try {
    const { email, password } = req.body;
    
    // 验证数据
    if (!email || !password) {
      return res.status(400).json({ message: '邮箱和密码是必填的' });
    }
    
    // 查找用户
    const user = await User.findOne({ where: { email } });
    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }
    
    // 验证密码
    const isPasswordValid = await bcrypt.compare(password, user.password);
    if (!isPasswordValid) {
      return res.status(401).json({ message: '密码错误' });
    }
    
    // 生成JWT token
    const token = jwt.sign(
      { userId: user.id, role: user.role },
      JWT_SECRET,
      { expiresIn: '1d' }
    );
    
    res.status(200).json({ message: '登录成功', token, user: { id: user.id, email: user.email, role: user.role } });
  } catch (error) {
    console.error('登录错误:', error);
    res.status(500).json({ message: '登录失败', error: error.message });
  }
};